📝 Резюме · 📄 Оригинал (628 B)
https://t.me/Python_libr/3365

Data Science для начинающих

Источник: https://t.me/Python_libr/3365


Что такое Data Science?

Data Science — это область, объединяющая статистику, программирование и бизнес-знания для извлечения полезной информации из данных. Для начинающих ключевые навыки:

  • Обработка и чистка данных
  • Визуализация результатов
  • Базовый анализ и статистика
  • Развёртывание приложений

Необходимые библиотеки

pip install pandas numpy matplotlib seaborn scikit-learn jupyter

Загрузка и исследование данных

import pandas as pd
import numpy as np

# Загрузка данных из CSV
df = pd.read_csv('data.csv')

# Первичное исследование
print(df.head())           # Первые 5 строк
print(df.info())           # Типы данных и количество значений
print(df.describe())       # Статистика (mean, std, min, max)
print(df.shape)            # Размер (строки, столбцы)

# Проверка пропусков
print(df.isnull().sum())   # Количество пропусков по столбцам

# Базовая статистика
print(df['возраст'].mean())
print(df['город'].value_counts())

Чистка и обработка данных

import pandas as pd

# Удаление пропусков
df_clean = df.dropna()           # Удалить строки с пропусками
df_clean = df.fillna(0)          # Заполнить нулями
df_clean = df.fillna(df.mean())  # Заполнить средним значением

# Удаление дубликатов
df_clean = df.drop_duplicates()

# Типы данных
df['дата'] = pd.to_datetime(df['дата'])
df['категория'] = df['категория'].astype('category')

# Фильтрация
df_filtered = df[df['возраст'] > 30]
df_filtered = df[(df['возраст'] > 20) & (df['город'] == 'Москва')]

# Группировка и агрегация
grouped = df.groupby('город')['зарплата'].mean()
print(grouped)
# москва    150000
# спб        140000

# Переименование и удаление столбцов
df = df.rename(columns={'возраст': 'age'})
df = df.drop(['лишний_столбец'], axis=1)

Визуализация данных

import matplotlib.pyplot as plt
import seaborn as sns

# Стиль графиков
sns.set_style("whitegrid")
plt.rcParams['figure.figsize'] = (12, 6)

# Гистограмма
plt.figure(figsize=(10, 5))
plt.hist(df['возраст'], bins=20, color='skyblue', edgecolor='black')
plt.xlabel('Возраст')
plt.ylabel('Частота')
plt.title('Распределение по возрастам')
plt.show()

# Диаграмма рассеяния
plt.scatter(df['опыт'], df['зарплата'], alpha=0.6)
plt.xlabel('Опыт (годы)')
plt.ylabel('Зарплата (руб)')
plt.title('Зависимость зарплаты от опыта')
plt.show()

# График для категорических данных
df.groupby('город')['зарплата'].mean().plot(kind='bar')
plt.ylabel('Средняя зарплата')
plt.title('Зарплата по городам')
plt.xticks(rotation=45)
plt.show()

# Тепловая карта корреляции
correlation = df[['возраст', 'опыт', 'зарплата']].corr()
sns.heatmap(correlation, annot=True, cmap='coolwarm')
plt.show()

Базовые статистические методы

import scipy.stats as stats

# Среднее, медиана, мода
mean = df['зарплата'].mean()
median = df['зарплата'].median()
mode = df['зарплата'].mode()[0]

# Стандартное отклонение и корреляция
std = df['зарплата'].std()
correlation = df['опыт'].corr(df['зарплата'])

# Статистический тест: есть ли разница между группами?
group1 = df[df['город'] == 'Москва']['зарплата']
group2 = df[df['город'] == 'СПБ']['зарплата']

t_stat, p_value = stats.ttest_ind(group1, group2)
print(f"p-value: {p_value}")  # Если < 0.05, то разница значима

# Распределение нормальное?
statistic, p_value = stats.shapiro(df['зарплата'])
print(f"Нормальное ли распределение? {p_value > 0.05}")

Машинное обучение для начинающих

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score, mean_squared_error

# Подготовка данных
X = df[['опыт', 'образование']]  # Признаки
y = df['зарплата']                # Целевая переменная

# Разделение на обучение и тест
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# Модель линейной регрессии
model = LinearRegression()
model.fit(X_train, y_train)

# Предсказание
predictions = model.predict(X_test)

# Оценка модели
r2 = r2_score(y_test, predictions)
rmse = np.sqrt(mean_squared_error(y_test, predictions))

print(f"R² score: {r2:.3f}")
print(f"RMSE: {rmse:.2f}")

# Более сложная модель: случайный лес
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
rf_predictions = rf_model.predict(X_test)
rf_r2 = r2_score(y_test, rf_predictions)
print(f"Random Forest R²: {rf_r2:.3f}")

Типичный workflow анализа данных

graph TD
    A["Загрузка<br/>данных"] --> B["Исследование<br/>EDA"]
    B --> C["Чистка<br/>данных"]
    C --> D["Трансформация<br/>признаков"]
    D --> E["Анализ<br/>и визуализация"]
    E --> F{Нужно ли<br/>обучение?}
    F -->|Да| G["Выбор модели"]
    G --> H["Обучение"]
    H --> I["Оценка"]
    I --> J{Хорошие<br/>результаты?}
    J -->|Нет| K["Оптимизация"]
    K --> I
    J -->|Да| L["Развёртывание"]

Развёртывание моделей

import pickle
import joblib

# Сохранение модели
joblib.dump(model, 'my_model.pkl')

# Загрузка модели позже
loaded_model = joblib.load('my_model.pkl')

# Создание простого Flask приложения
from flask import Flask, request, jsonify

app = Flask(__name__)
model = joblib.load('my_model.pkl')

@app.route('/predict', methods=['POST'])
def predict():
    data = request.json
    features = [[data['опыт'], data['образование']]]
    prediction = model.predict(features)[0]
    return jsonify({'зарплата': prediction})

if __name__ == '__main__':
    app.run(debug=True)

Лучшие практики

  1. Начните с исследования (EDA) — поймите ваши данные
  2. Документируйте процесс — используйте Jupyter notebooks
  3. Проверяйте качество данных — пропуски, выбросы, дубликаты
  4. Не переусложняйте — часто простая модель лучше чем сложная
  5. Кроссвалидация — оценивайте модель правильно
  6. Начните с малого — используйте подмножество данных для экспериментов
  7. Визуализируйте результаты — графики помогут понять результаты
  8. Переиспользуйте код — создавайте утилиты для повторяющихся задач

Полезные ресурсы

  • Pandas документация для работы с таблицами
  • Scikit-learn для машинного обучения
  • Matplotlib/Seaborn для визуализации
  • Kaggle для датасетов и соревнований